package cn.itcast.dao;

import cn.itcast.pojo.Vo.ReportSetmeal;
import cn.itcast.pojo.data4Month;
import cn.itcast.pojo.Order;
import cn.itcast.pojo.Vo.MonthAndNumber;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import cn.itcast.pojo.Vo.OrderVo;

import java.util.Date;
import cn.itcast.pojo.Vo.OrderVo;
import java.util.List;

@Repository
public interface OrderDao {


    /**
     * 保存预约信息
     * @param order
     * @return
     */
    Integer save(Order order);

    /**
     * 根据Id查询去订单详情
     * @param id
     * @return
     */
//    Order findByOrderId(String id);

    /**
     * 查找今日预约数
     * @param today
     * @return
     */
    Integer findNewOrder(String today);

    /**
     * 根据时间查找预约数
     * @param today
     * @param thisWeekDay
     * @return
     */
    Integer findOrderByTime(@Param("startDay")String today, @Param("endDay")String thisWeekDay);

    /**
     * 查找今日到诊数
     * @param today
     * @return
     */
    Integer findTodayVisits(String today);

    /**
     * 根据时间查找到诊数
     * @param today
     * @param thisWeekDay
     * @return
     */
    Integer findWeekVisitsByTime(@Param("startDay") String today,@Param("endDay") String thisWeekDay);

    /**
     * 查询所有订单
     * @return
     */
    List<Order> findAll();

    /**
     * 通过setmealId查询订单表中该套餐的条数
     * @param id
     * @return
     */
    Integer findSetmealCount(Integer id);

    //添加预约信息
    Integer insert(@Param("order") Order order);

    //编辑信息
    Integer update(@Param("order") Order order);

    //通过id信息查询ordervo对象
    OrderVo findById(String id);

   //通过id信息查询order对象
    Order findByOrderId(String id);


    //编辑就诊状态
    Integer updateArrival(String id, Integer arrival);


    //分页条件查询
    List<OrderVo> findPage(@Param("phoneNumber") String phoneNumber, @Param("startDate") String startDate, @Param("endDate") String endDate,@Param("orderType")  String orderType, @Param("payStatus") Integer payStatus);

    //查询月对应的会员数量
    List<MonthAndNumber> queryMemberAndMothods();

    /**
     * 查询每月收入
     * @return
     */
    List<data4Month> findIncomeStatistics();

    /**
     * 查询预约人数
     * @return
     */
    List<data4Month> findOrderStatistics();

    /**
     * 查询每月支付数量
     * @return
     */
    List<data4Month> findPayStatistics();


    /**
     * 根据身份证号和套餐号查询该订单是否存在
     * @param idCard
     * @param setmealId
     * @return
     */
    Order findOderByIdCard(String idCard, String setmealId);

    /**
     * 根据日期查询当日是否可以预约
     * @param date
     * @return
     */
    Integer findByDate(Date date);

    /**
     * 根据日期查询当前日期已预约的人数
     * @param date
     * @return
     */
    Integer findByReservations(Date date);

    /**
     * 预约成功后修改可预约人数
     * @param date
     */
    void updateReservations(Date date);

    /**
     * 修改订单支付状态
     * @param id
     */
    void updatePayStatus(String id);

    //获取套餐名称数据 和套餐名称
    List<ReportSetmeal> setmeals();

}
